/**
 * 版权所有(C)，上海海鼎信息工程股份有限公司，2007，所有权利保留。
 * 
 * 项目名：	rumba
 * 文件名：	ExpOperatorCmpst.java
 * 模块说明：	
 * 修改历史：
 * Dec 13, 2007 - lxm - 创建。
 */
package com.hd123.rumba.gwt.cpnts.filter.client;

import java.util.ArrayList;
import java.util.List;

import com.google.gwt.user.client.ui.ClickListener;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.RadioButton;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
import com.hd123.rumba.gwt.base.client.exception.ClientBizException;

/**
 * 表达式运算符 | 界面部件
 * 
 * @author lxm
 * 
 */
class ExpOperatorCmpst extends Composite implements IFilterDialogCmpst {

  /**
   * 构造函数
   * 
   * @param owner
   *          指定所属窗体。
   */
  public ExpOperatorCmpst(FilterDialog owner) {
    super();
    assert owner != null;
    this.owner = owner;
    drawSelf();
  }

  /**
   * 取得当前表达式字符串。
   * 
   * @param leftExp
   *          指定左边的表达式。
   * @param rightExp
   *          指定右边的表达式。
   * @return
   * @throws ClientBizException
   */
  public String getRunnableExp(String leftExp, String rightExp) throws ClientBizException {
    if (currentOperator == null)
      return "";
    return currentOperator.getRunnableExp(leftExp, rightExp);
  }

  public FilterDialog getDialog() {
    return owner;
  }

  // --------------------------------------------------------------------------
  // 数据部分
  // --------------------------------------------------------------------------

  /** 所属窗体 */
  private FilterDialog owner;

  private CompareOperator currentOperator;

  // --------------------------------------------------------------------------
  // 用户界面部分
  // --------------------------------------------------------------------------

  /** List of RadioButton */
  private List rdoOperators;

  private class Listener_rdoOperator implements ClickListener {

    public void onClick(Widget sender) {
      assert sender instanceof RadioButton;
      assert rdoOperators.contains(sender);
      int idx = rdoOperators.indexOf(sender);
      currentOperator = CompareOperator.All[idx];
    }
    
  }

  private void drawSelf() {
    VerticalPanel pnl = new VerticalPanel();
    pnl.setSpacing(1);

    rdoOperators = new ArrayList();
    for (int i = 0; i < CompareOperator.All.length; i++) {
      CompareOperator operator = CompareOperator.All[i];
      RadioButton rdoOperator = new RadioButton("operators", operator.getCaption());
      rdoOperator.addClickListener(new Listener_rdoOperator());
      rdoOperators.add(i, rdoOperator);
      pnl.add(rdoOperator);
      if (i == 0)
        rdoOperator.setChecked(true);
    }
    this.initWidget(pnl);
  }

}
